#***********************************************************
#
# @className  WaterprintRSF
#
# @fileName   waterprintClass.rb
#
# @author     Leoš Klik, klikleos@fel.cvut.cz
#
# @desc       Trida prida na pozadi pdf souboru vodotisk
#             s uzivatelskym jmenem, serverem ze ktereho
#             byl soubor stazen, datem stazeni a nastavi
#             zadane opravneni pro pdf
#
# @constructor
#             username - bude uvedeno na pozadi
#             hostname - server ze ktereho bylo stazeno
#             footerText - text v paticce (1)
#             opravneni - omezeni prace se souborem pdf (2)
#             velikostPapiru - A4 / A5 / B4 ....
#             soubor - vstupni soubor napr. skripta.pdf
#
# @require    gem prawn (gem install pdf-writer)
#             pdf Toolkit (nainstalovat balik pdftk)
#
# (1)   retezec nebo 0 - bude shodne s hlavickou
#
# (2)   00 - zakazat vsechyn operace s pdf
#       01 - povolit pouze tisk
#       10 - povolit pouze kopirovani
#       11 - povolit tisk i kopirovani
#
#***********************************************************

class WaterprintPDF

#---------------------------------
#  DEFINICE KONSTANT
#   v pripade potreby zmenit zde
#---------------------------------
@@UHEL = 45
@@VELIKOSTPISMAU = 80
@@BARVAPISMA = "c0c0c0"
@@FONT = "Helvetica"


  def initialize(username, hostname, footerText, opravneni, velikostPapiru, soubor)
    @username = username
    @hostname = hostname
    @opravneni = opravneni
    @velikostPapiru = velikostPapiru
    @soubor = soubor
    @footerText = footerText
  end

  private  
    def generujHeslo(length=8)
      chars = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'
      password = ''
      length.times { password << chars[rand(chars.size)] }
      password
    end

  public 
    def getPdf
      pdf = Prawn::Document.new :page_size => @velikostPapiru, :page_layout => :portrait,
      :left_margin => 0,
      :right_margin => 0,
      :top_margin => 0,
      :bottom_margin => 0
      pdf.font @@FONT

      
      #------------------------------------------------------------------------------------------------
      #   VYPOCET A UMISTENI SIKMEHO VODOTISKU NA STRED STRANKY
      #------------------------------------------------------------------------------------------------
      _delkaTextu = pdf.width_of(@username, :size => @@VELIKOSTPISMAU)
      _vyskaTextu = @@VELIKOSTPISMAU
      page_width = pdf.bounds.bottom_right[0]
      page_height = pdf.bounds.top_left[1]
      
      _textXpozice = (page_width/2) - (_delkaTextu/2)
      _textYpozice = (page_height/2) - (_vyskaTextu/2)
      
      #---posun stredu po rotaci
      _uhloprickaPul = Math.sqrt(_delkaTextu * _delkaTextu + _vyskaTextu * _vyskaTextu) / 2

      _vertikalniPosun = Math.sin(@@UHEL) * _uhloprickaPul - (_vyskaTextu / 2)
      _finalYpozice = _textYpozice - _vertikalniPosun

      _horizontalniPosun = (_delkaTextu / 2) - Math.cos(@@UHEL) * _uhloprickaPul
      _finalXpozice = _textXpozice + _horizontalniPosun

      pdf.fill_color @@BARVAPISMA
      pdf.draw_text(@username, :at => [_finalXpozice, _finalYpozice], :size => @@VELIKOSTPISMAU, :rotate => @@UHEL)
      
      #------------------------------------------------------------------------------------------------
      #   UMISTENI VODOTISKU DO HLAVICKY A PATICKY STRANKY
      #------------------------------------------------------------------------------------------------    
      datum = Time.new
      datumFormatted = datum.strftime("%d.%m.%Y %H:%M:%S")

      headerText = "Staženo uživatelem #{@username} z #{@hostname}, " + datumFormatted
      if @footerText == 0
        @footerText = headerText
      end

      pdf.text_box(@footerText, :size => 11, :at => [0,20], :align => :center)
      pdf.text_box(headerText, :size => 11, :at => [0, page_height - 15], :width => page_width, :align => :center)

      for i in (1..4)
        @soubor.chop!
      end

      #--ulozi pdfko s vodotiskem
      pdf.render_file("tmp_#{@username}_#{@soubor}.pdf")
      
      #--generator nahodneho hesla owner_pw
      @pdfHeslo = generujHeslo
      
      #--nastaveni opravneni pdf
      case @opravneni
        when 00 #vse zakazano
          @setPerm = ""
        when 01 #pouze tisk
          @setPerm = "allow printing"
        when 10 #pouze kopirovani
          @setPerm = "allow copycontents"
        when 11 #tisk a kopirovani
          @setPerm = "allow printing copycontents"
      end
      
      system("pdftk #{@soubor}.pdf background tmp_#{@username}_#{@soubor}.pdf output #{@soubor}_#{@username}.pdf owner_pw #{@pdfHeslo} #{@setPerm}")
      
      system("rm -rf tmp_#{@username}_#{@soubor}.pdf")

    end
end
  
